package com.diandiansong.manager.utils;

import com.diandiansong.app.utils.Api;
import com.diandiansong.app.utils.Base64Utils;
import com.diandiansong.app.utils.RSAUtils;

import java.security.PublicKey;
import java.util.HashMap;
import java.util.Map;

import diandiansong.library.utils.CCallBack;
import diandiansong.library.utils.OnLoadingListener;

/**
 * Manager主管端API接口
 */
public class M extends Api {

    /**
     * POST /api/sales/login
     */
    public static <T> void salesLogin(String mobile, String password, OnLoadingListener oer, CCallBack<T> callBack) {

        try {
            // 从字符串中得到公钥
            PublicKey publicKey = RSAUtils.loadPublicKey(PUCLIC_KEY);
            // 从文件中得到公钥
            //InputStream inPublic = getResources().getAssets().open("rsa_public_key.pem");
            //PublicKey publicKey = RSAUtils.loadPublicKey(inPublic);
            // 加密
            byte[] encryptByte = RSAUtils.encryptData(password.getBytes(), publicKey);
            // 为了方便观察吧加密后的数据用base64加密转一下，要不然看起来是乱码,所以解密是也是要用Base64先转换
            password = Base64Utils.encode(encryptByte);

        } catch (Exception e) {
            e.printStackTrace();
        }

        Map<String, String> params = new HashMap<>();
        params.put("mobile", mobile);
        params.put("password", password);
        post("/api/sales/login", params, oer, callBack);
    }

    /**
     * POST /api/sales/find_password
     * BaseEntity
     */
    public static <T> void salesFind_password(String mobile, String verif_code, String password_one, String password_two, OnLoadingListener oer,
                                              CCallBack<T> callBack) {
        Map<String, String> params = new HashMap<>();
        params.put("mobile", mobile);
        params.put("verif_code", verif_code);
        params.put("password_one", password_one);
        params.put("password_two", password_two);
        post("/api/sales/find_password", params, oer, callBack);
    }

    /**
     * /api/sales/find_password_sms
     * 忘记密码时发送手机验证码
     */
    public static <T> void salesFind_password_sms(String mobile, OnLoadingListener oer,
                                                  CCallBack<T> callBack) {
        Map<String, String> params = new HashMap<>();
        params.put("mobile", mobile);
        post("/api/sales/find_password_sms", params, oer, callBack);
    }

    /**
     * /api/sales/team
     * 我的团队列表
     */
    public static <T> void salesTeam(String page, CCallBack<T> callBack) {
        Map<String, String> params = new HashMap<>();
        if (page != null && !page.equals("0")) {
            params.put("page", page);
        }

        get("/api/sales/team", params, null, callBack);
    }

    /**
     * /api/sales/team_top
     * 我的团队列表上的总金额
     */
    public static <T> void salesTeam_top(CCallBack<T> callBack) {
        Map<String, String> params = new HashMap<>();

        get("/api/sales/team_top", params, null, callBack);
    }

    /**
     * /api/sales/team/salesman
     * 我的团队 - 每个业务员的业绩汇总
     * 传数组中最后一个days值传过来,日期，格式为2018-07-12
     */
    public static <T> void salesSalesman(String id, String page, CCallBack<T> callBack) {
        Map<String, String> params = new HashMap<>();
        params.put("id", id);
        if (page != null && !page.equals("0")) {
            params.put("page", page);
        }

        get("/api/sales/team/salesman", params, null, callBack);
    }


    /**
     * /api/sales/team/info
     * 团队管理 -列表
     */
    public static <T> void salesTeamInfo(String page, CCallBack<T> callBack) {
        Map<String, String> params = new HashMap<>();
        params.put("page", page);

        get("/api/sales/team/info", params, null, callBack);
    }


    /**
     * /api/sales/team/addinfo
     * 团队管理 -添加业务员
     */
    public static <T> void salesTeamAddinfo(String mobile, CCallBack<T> callBack) {
        Map<String, String> params = new HashMap<>();
        params.put("mobile", mobile);

        post("/api/sales/team/addinfo", params, null, callBack);
    }


    /**
     * /api/sales/team/addinfo
     * 团队管理 -添加业务员
     */
    public static <T> void salesTeamDel(String id, CCallBack<T> callBack) {
        Map<String, String> params = new HashMap<>();
        params.put("id", id);

        post("/api/sales/team/del", params, null, callBack);
    }


    /**
     * /api/sales/user
     * 我的首页、个人资料
     */
    public static <T> void salesUser(OnLoadingListener oer, CCallBack<T> callBack) {
        Map<String, String> params = new HashMap<>();

        get("/api/sales/user", params, oer, callBack);
    }


    /**
     * GET /api/sales/user/customer
     * 我的客户-列表
     * 实现备注
     */
    public static <T> void salesUserCustomer(String page, CCallBack<T> callBack) {
        Map<String, String> params = new HashMap<>();
        params.put("page", page);

        get("/api/sales/user/customer", params, null, callBack);
    }


    /**
     * /api/sales/user/customer_view
     * 我的客户-详情
     * 实现备注
     * 必填，客户ID
     */
    public static <T> void salesUsercustomer_view(String member_id, OnLoadingListener oer, CCallBack<T> callBack) {
        Map<String, String> params = new HashMap<>();
        params.put("member_id", member_id);

        get("/api/sales/user/customer_view", params, oer, callBack);
    }


    /**
     * /api/sales/user/order_list
     * 我的客户-订单列表
     * dateinfo 选填，日期格式，如2018-07-12 ，这个是业绩那边某个客户点到订单列表传的值
     * todo entity
     */
    public static <T> void salesUserOrder_list(String member_id, String page, String dateinfo, CCallBack<T> callBack) {
        Map<String, String> params = new HashMap<>();
        params.put("member_id", member_id);
        params.put("page", page);
        if (dateinfo != null) {
            params.put("dateinfo", dateinfo);
        }

        get("/api/sales/user/order_list", params, null, callBack);
    }


    /**
     * /api/sales/achievement
     * 我的业绩 - 列表
     * 实现备注
     * types
     * 0
     * 必填，类型 0=全部业绩 1=本月业绩
     * query	integer
     * page
     * 选填，分页的值，传数组中最后一个days值传过来，也就是日期，如2018-07-12
     * query	string
     * 响应消息
     */
    public static <T> void salesAchievement(String types, String page, CCallBack<T> callBack) {
        Map<String, String> params = new HashMap<>();
        params.put("types", types);
        if (page != null && !page.equals("0")) {
            params.put("page", page);
        }

        get("/api/sales/achievement", params, null, callBack);
    }

    /**
     * /api/sales/achievement_top
     * 我的业绩 - 列表上的总金额
     * types 必填，类型 0=全部业绩 1=本月业绩
     */
    public static <T> void salesAchievement_top(String types, CCallBack<T> callBack) {
        Map<String, String> params = new HashMap<>();
        params.put("types", types);

        get("/api/sales/achievement_top", params, null, callBack);
    }


    /**
     * /api/sales/achievement/customer
     * 我的业绩 - 根据日期展示客户列表金额数据
     * 实现备注
     * dateinfo 必填，日期，格式为2018-07-12
     * page 选填，分页的值，传数组中最后一个member_id值传过来
     */
    public static <T> void salesAchievementCustomer(String dateinfo, String page, CCallBack<T> callBack) {
        Map<String, String> params = new HashMap<>();
        params.put("dateinfo", dateinfo);
        params.put("page", page);

        get("/api/sales/achievement/customer", params, null, callBack);
    }


    /**
     * /api/sales/message
     * 消息通知
     * 实现备注
     */
    public static <T> void salesMessage(String page, CCallBack<T> callBack) {
        Map<String, String> params = new HashMap<>();
        params.put("page", page);

        get("/api/sales/message", params, null, callBack);
    }

    /**
     * /api/my/head
     */
    public static <T> void myHead(String url, OnLoadingListener oer, CCallBack<T> callBack) {
        Map<String, String> params = new HashMap<>();
        params.put("avatar", url);
        post("/api/sales/my/head", params, oer, callBack);
    }

}